home *** CD-ROM | disk | FTP | other *** search
- /*
- 指定サイズ文字入力関数 Ver.1.010
- Okome System
- */
-
- #include <string.h>
- #include <MOS.H>
- #include <FMCfrb.h>
- #include <kkstr2.h>
- #include <Normlib.h>
-
- extern int kkx, kky;
-
- int keyin(int x, int y, char *nn, int l, int c0, int c1, int p )
- {
- static int xp=0;
- unsigned int m, k;
- int sl, r = 3;
- sl = strlen(nn);
- kkx = x + xp*8;
- kky = y;
- if (xp > sl)
- xp = sl;
- do {
- m = KYB_read(1, &k);
- } while((m & 0xff00) == 0xff00 && KAN_inpchk()==KAN_MISET);
- if ( (m & 0xff00) != 0xff00)
- {
- switch(m)
- {
- case 0x08:
- if (sl) {
- if (xp==0) {
- xp++;
- if (iskanji3(nn,xp+1)==3)
- xp++;
- }
- if (iskanji3(nn,xp)==3) {
- strcpy(&nn[xp-2], &nn[xp]);
- sl--;
- xp--;
- } else
- strcpy(&nn[xp-1], &nn[xp]);
- sl--;
- xp--;
- }
- break;
- case 0x0d:
- case 0x8012:
- xp = 0;
- r = 0;
- break;
- case 0x1d:
- if (xp) {
- xp--;
- if (iskanji3(nn,xp+1)==3)
- xp--;
- }
- break;
- case 0x1c:
- if (xp<sl) {
- xp++;
- if (iskanji3(nn,xp+1)==3)
- if (xp<sl)
- xp++;
- else
- xp--;
- }
- break;
- case 0x7f:
- if (xp<sl)
- strcpy(&nn[xp], &nn[xp+iskanji3(nn,xp+1)]);
- break;
- case 0x1b:
- case 0x8011:
- r = 2;
- break;
- default:
- if (0x1F < m && m < 0x100) {
- if (sl<l) {
- _rstrcpy( &nn[xp+1], &nn[xp] );
- sl++;
- nn[xp] = m;
- if (xp<l-1) xp++;
- }
- else if (iskanji3(nn,l)==2) {
- nn[l-1] = 0;
- sl--;
- }
- }
- }
- }
- if ( m / 0x100 != 0xff || p) {
- MOS_disp(0);
- boxf( x, y, x+l*8-1, y+15, c1 );
- symbol( x,y+15, nn, 16, c0 );
- if (r)
- boxb( x + xp*8, y, x + xp*8+1, y+15, 0xa );
- MOS_disp(1);
- }
- return (r);
- }
-